package com.reform.service;

import com.reform.pojo.project.Project;
import com.baomidou.mybatisplus.extension.service.IService;
import com.reform.pojo.project.SimplifyProject;
import com.reform.res.Result;

import javax.servlet.http.HttpServletRequest;
import java.sql.SQLException;
import java.util.List;

/**
 * <p>
 * 项目基本信息 服务类
 * </p>
 *
 * @author mortale
 * @since 2021-07-20
 */
public interface IProjectService extends IService<Project> {

    /**
     * 创建项目
     * @param project
     * @return
     * @throws SQLException
     */
    Integer creatProject( Project project) throws SQLException;

    Integer deleteProject(String proId) throws SQLException;

    Integer updateProject(Project project) throws SQLException;

    /**
     * 项目名重复率
     * @param projectName
     * @return
     * @throws SQLException
     */
    Result nameRate(String batchId,String proId, String projectName, Float repetitionRate) throws SQLException;

    /**
     * 根据gh获取该教师主持的项目信息
     * @param gh
     * @return
     * @throws SQLException
     */
    Result getProjectsByGH(String gh) throws SQLException;

    /**
     * 获取教师暂存项目
     * @param gh 教师工号
     * @return List<SimplifyProject>
     */
    List<SimplifyProject> getInitiationInfo(String gh, Integer type);

    /**
     * 根据gh获取该教师主持的简单项目信息
     * @param request 教师工号
     * @return Result
     */
    Result getHostProjectsByGH(HttpServletRequest request);

    /**
     * 根据gh获取该教师参与的简单项目信息
     * @param request 教师工号
     * @return
     */
    Result getPartakeProjectsByGH(HttpServletRequest request);

    /**
     * 通过项目id修改项目状态
     * @param proId
     * @return
     */
    Result updateProByProId(String proId, Integer proApproval, Integer proStatus);

    /**
     * 通过项目id修改项目状态
     * @param proId
     * @param proStatus
     * @return
     */
    Result updateProStatusByProId(String proId, Integer proStatus);

    Result updateProsByProId(String projectStatus);

    /**
     * 通过项目id添加项目延期原因
     * @param proId 项目id
     * @param delayCause 延期原因
     * @return
     */
    Result addDelayCauseByProId(String proId, String delayCause);

    /**
     * 通过项目id查看项目延期原因
     * @param proId 项目id
     * @return
     */
    Result getDelayCauseByProId(String proId);

    /**
     * 根据批次id获取其下的所有proId
     * @param batchId
     * @return
     */
    List<String> getProIdByBatchId(String batchId);

    /**
     * 根据项目状态获取批次id
     * @param approval
     * @return
     */
    List<String>  getBatchIdByApproval(int approval);
}
